package com.jing.system.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Date Operate Class
 * @author jing.yue
 * @version 1.0
 * @since 2012-03-30
 *
 */
public class DateUtil {

	/** 默认的格式: yyyy-MM-dd HH:mm:ss */
	public static String FMT_DEFAULT = "yyyy-MM-dd HH:mm:ss";

	/** 格式: yyyyMMddHHmmss */
	public static String FMT_YYYYMMDDHHMMSS = "yyyyMMddHHmmss";

	/** 格式: yyyyMMdd */
	public static String FMT_YYYYMMDD = "yyyyMMdd";

	/** 格式: yyyy-MM-dd */
	public static String FMT_YYYY_MM_DD = "yyyy-MM-dd";

	/**
	 * 日期格式转为字符串格式
	 * @param date：传入的日期
	 * @param fmt ：转为字符的格式
	 * @return    ：String
	 */
	public static String dateToString(Date date, String fmt){
		SimpleDateFormat simpDateFormat = new SimpleDateFormat(fmt);
	    return simpDateFormat.format(date);
	}

	/**
	 * 字符串格式转日期
	 * @param str：传入的字符串
	 * @param fmt：转为的日期格式
	 * @return   ：Date
	 */
	public static Date stringToDate(String str, String fmt){
		SimpleDateFormat simpDateFormat = new SimpleDateFormat(fmt);
	    try {
			return simpDateFormat.parse(str);
		} catch (ParseException e) {
			throw new RuntimeException("日期格式不正确");
		}
	}

	/**
	 * 获取当前字符串日期格式[yyyy-MM-dd]
	 * @return
	 */
	public static String getTodayYyyyMmDd() {
		return DateUtil.dateToString(DateUtil.getTime(), DateUtil.FMT_YYYY_MM_DD);
	}

	/**
	 * 获取当前字符串日期格式[yyyy-MM-dd 23:59:59]
	 * @return
	 */
	public static String getTodayYyyyMmDdMaxHhmmss() {
		return DateUtil.dateToString(DateUtil.getTime(), DateUtil.FMT_YYYY_MM_DD) + " 23:59:59";
	}

	/**
	 * 获取当前时间
	 * @return
	 */
	public static Date getTime() {
		return new Date();
	}
	
	/**
	 * 获取时间差
	 * @param beginTime	开始时间
	 * @param endTime	结束时间
	 * @param type		时间的类型[0秒/1分钟/2小时]
	 * @return
	 */
	public static Long getDateDiff(Date beginTime, Date endTime, Integer type) {
		long time = 0;
		long diffTime = endTime.getTime() - beginTime.getTime();
		switch (type) {
		case 0:
			time = diffTime/1000;
			break;
		case 1:
			time = diffTime/(60*1000);
			break;
		case 2:
			time = diffTime/(60*60*1000);
			break;
		}
		return time;
	}
}